2010-03-23 2 views
0

У меня есть поле ввода в форме. При нажатии submit, я хочу подтвердить, чтобы пользователь вводил нелатинские символы, поэтому любые иностранные символы, такие как китайский, среди многих других. Или, по крайней мере, тест, чтобы убедиться, что он не содержит латинских символов.Как я могу проверить, содержит ли поле ввода чужие символы?

Могу ли я использовать регулярное выражение для этого? Какой был бы лучший подход для этого?

Я проверяю как в javaScript, так и в PHP. Какие решения я могу использовать для проверки иностранных символов в поле ввода на обоих языках программирования?

+1

Что именно вы подразумеваете под «нелатинским»? Любые символы не в наборе 'latin-1'? Или что-нибудь кроме безударных символов A-Z/a-z? Должны ли знаки пунктуации быть допущены или только фактические буквы? Должно ли это работать как на PHP, так и на JavaScript, или это решение для одного из них достаточно? –

+0

По нелатинскому, я имею в виду любые символы иностранных языков, которые используют совершенно разные символы, например, азиатские символы. Поле предназначено для профессионального титула человека, поэтому я бы предположил, что пунктуация может потребоваться для таких случаев, как Джон Т. Смит, доктор философии. Спасибо за вопрос. Я даже не подумал об этом! – zeckdude

+0

Мне не обязательно нужно решение, которое работает для обоих. Я возьму два разных решения как для PHP, так и для JavaScript, если они оба делают то, что мне нужно. Не может быть придирчивым. – zeckdude

ответ

1

В Javascript, по крайней мере, вы можете использовать шестнадцатеричные коды внутри выражений диапазона символов:

var rlatins = /[\u0000-\u007f]/; 

Вы можете проверить, чтобы увидеть, если есть какие-то латинские символы в строку, как это:

if (rlatins.test(someString)) { 
    alert("ROMANI ITE DOMUM"); 
} 
+0

Это вызовет знаки пунктуации и другие символы, кроме латинских букв. –

+0

Да, это будет, Непонятно, в исходном вопросе, что было предназначено. Я предположил, что проверка/[A-Za-z]/была настолько очевидной, что это не могло быть проблемой :-) – Pointy

+0

Предложение, которое вы сделали, работает очень хорошо, за исключением того, что, как только я добавляю период или пробел или что-то подобное в поле вместе с иностранными символами, то оно считается латинским. Как я могу изменить ваше предложение, чтобы позволить другим персонажам подобное, но все же не допускать никаких обычных писем? Спасибо за вашу помощь! – zeckdude

2

В PHP вы можете проверить свойство Unicode IsLatin. Это, вероятно, ближе всего к тому, что вы хотите.

Так что если preg_match('/\p{Latin}/u', $subject) возвращает true, то в вашем будет хотя бы один латинский символ. См. Также this reference.

JavaScript не поддерживает это; вам придется вручную управлять допустимыми диапазонами Юникода.

+0

Все, что я пытаюсь сделать, это проверить, чтобы символы в поле не были латинскими. – zeckdude

+1

Определите «не латинские символы». –

+0

См. Комментарий, который я оставил выше. – zeckdude

1

Вы пытаетесь проверить, есть ли все буквы не Латинский, но вы принимаете буквы с акцентом.

Простое решение для проверки строки с использованием регулярных выражений (это полезно, если у вас есть плагин проверки):

/^[^a-z]+$/i 
  • ^...$ - Матч от начала до конца
  • ^[...] - символы, являются не
  • a-z - продуманным Z,
  • + - по крайней мере, одну букву
  • /i - игнорируя регистр (также может сделать /^[^a-zA-Z]+$/)

Другой вариант заключается просто искать письма:

/[a-z]/i 

Это регулярное выражение будет соответствовать, если строка conatins письмо, поэтому вы можете его проверить.

В JavaScript вы можете проверить, что легко с if:

var s = "שלום עולם"; 
if(s.match(/^[^a-z]+$/i){ 
} 

или

if(!s.match(/[a-z]/i)) 

PHP имеет другой синтаксис и более высокий уровень безопасности, чем JavaScript, но регулярные выражения одинаковы.

Смежные вопросы