xregexp с другим результатом

#regex #typescript #xregexp

#регулярное выражение #typescript #xregexp

Вопрос:

Я хочу проверить строку с помощью правил:

  • строка должна содержать хотя бы одну букву
  • строка может содержать только эти символы (но это не обязательно): ‘ , — , ( , )
  • если в строке присутствует символ, он также должен содержать букву (по крайней мере, один 1-й маркер)
  • не допускаются только символы

пока я придумал следующее регулярное выражение:

     static personName = XRegExp.cache("^[\s\p{L}\'\-\(\)] (?=\S*\p{L})\S $");
  

который работает некорректно. Только "^(?=\S*\p{L})\S $" это помогает с буквами, я изо всех сил пытаюсь понять, как добавить к нему символы, чтобы все правила были переданы, что я делаю не так?

Ответ №1:

Если разрешенные вами символы ограничены перечисленными вами, вы можете использовать

 var regex = XRegExp("^[\s'()-]*\p{L}[\s\p{L}'()-]*$"); 
  

Если вы хотите разрешить любые символы, но только подмножество символов, с ограничением «не менее 1 буквы», используйте

 var regex = XRegExp("^[\p{N}\s'()-]*\p{L}[\p{L}\p{N}\s'()-]*$"); 
  

Смотрите демонстрацию JS:

 var regex = XRegExp("^[\s'()-]*\p{L}[\s\p{L}'()-]*$");
console.log( regex.test("Sóme (unknown-string) doesn't like it") );

var regex = XRegExp("^[\p{N}\s'()-]*\p{L}[\p{L}\p{N}\s'()-]*$"); 
console.log( regex.test("Sóme unknown-string (123)") );  
 <script src="https://cdnjs.cloudflare.com/ajax/libs/xregexp/3.2.0/xregexp-all.min.js"></script>  

Подробные сведения

  • ^ — начало строки
  • [\s'()-]* — 0 или более пробелов, ' , ( ) или - символов
  • [\p{N}\s'()-]* — 0 или более цифр, пробелов и разрешенных символов
  • \p{L} — письмо
  • [\s\p{L}'()-]* — 0 или более пробелов, букв, ' , ( ) или - символов
  • [\p{L}\p{N}\s'()-]* — 0 или более букв, цифр, пробелов и разрешенных символов
  • $ — конец строки.

Ответ №2:

Попробуйте это регулярное выражение

  ^[a-zA-Z0-9'-()]*[a-zA-Z][a-zA-Z0-9'-()]*$
  

Демонстрация

Комментарии:

1. Почему вы решили запретить нули?

2. Я забыл включить 0s 🙂